// Copyright (C) 1953-2022 NUDT
// Verilog module name - hardware_control_point
// Version: V3.4.0.20220228
// Created:
//         by - fenglin
////////////////////////////////////////////////////////////////////////////
// Description:
//         hardware control point
///////////////////////////////////////////////////////////////////////////
`timescale 1ns/1ps

module hardware_control_point
(
        i_clk,
        i_rst_n, 

        i_tsnnic_or_tsnswitch ,//1:tsnnic.  0:tsnswitch        

        ov_syn_clk        , 
        o_local_cnt_rst   ,        
        o_tsn_or_tte      ,
        
	    i_data_wr_from_tss ,
	    iv_data_from_tss   ,  
	    ov_data_to_tss     ,
	    o_data_wr_to_tss   ,
        
        iv_data_cpu   ,
        i_data_wr_cpu , 
        ov_data_cpu   ,
        o_data_wr_cpu ,
        
        iv_data_tap   ,
        i_data_wr_tap ,

        ov_local_id                      , 
        iv_tss_ver                       , 
        o_rc_rxenable                    ,
        o_st_rxenable                    ,
        
        i_tsmp_lookup_table_key_wr       ,
        iv_tsmp_lookup_table_key         ,
        ov_tsmp_lookup_table_outport     ,
        o_tsmp_lookup_table_outport_wr   ,

		o_cycle_start            ,
        o_sync_ok           ,

        ov_hcp_ext_command            ,
        o_hcp_ext_command_wr          ,        
        iv_hcp_ext_command_ack        ,
        i_hcp_ext_command_ack_wr      ,
        
		i_osm_req_tx_pulse_p0     ,     
		i_osm_resp_rx_pulse_p0    ,     
		i_osm_req_tx_pulse_p1     ,     
		i_osm_resp_rx_pulse_p1    ,     
		i_osm_req_tx_pulse_p2     ,     
		i_osm_resp_rx_pulse_p2    ,     
		i_osm_req_tx_pulse_p3     ,     
		i_osm_resp_rx_pulse_p3    ,     
		i_osm_req_tx_pulse_p4     ,     
		i_osm_resp_rx_pulse_p4    ,     
		i_osm_req_tx_pulse_p5     ,     
		i_osm_resp_rx_pulse_p5    ,     
		i_osm_req_tx_pulse_p6     ,     
		i_osm_resp_rx_pulse_p6    ,     
		i_osm_req_tx_pulse_p7     ,     
		i_osm_resp_rx_pulse_p7    ,     
		i_osm_req_tx_pulse_p8     ,     
		i_osm_resp_rx_pulse_p8    ,     
		i_osm_req_tx_pulse_p9     ,     
		i_osm_resp_rx_pulse_p9    ,     
		i_osm_req_tx_pulse_p10    ,     
		i_osm_resp_rx_pulse_p10   ,     
		i_osm_req_tx_pulse_p11    ,     
		i_osm_resp_rx_pulse_p11   ,     
		i_osm_req_tx_pulse_p12    ,     
		i_osm_resp_rx_pulse_p12   ,     
		i_osm_req_tx_pulse_p13    ,     
		i_osm_resp_rx_pulse_p13   ,     
		i_osm_req_tx_pulse_p14    ,     
		i_osm_resp_rx_pulse_p14   ,     
		i_osm_req_tx_pulse_p15    ,     
		i_osm_resp_rx_pulse_p15   ,     
		i_osm_req_tx_pulse_p16    ,     
		i_osm_resp_rx_pulse_p16   ,     
		i_osm_req_tx_pulse_p17    ,     
		i_osm_resp_rx_pulse_p17   ,     
		i_osm_req_tx_pulse_p18    ,     
		i_osm_resp_rx_pulse_p18   ,     
		i_osm_req_tx_pulse_p19    ,     
		i_osm_resp_rx_pulse_p19   ,     
		i_osm_req_tx_pulse_p20    ,     
		i_osm_resp_rx_pulse_p20   ,     
		i_osm_req_tx_pulse_p21    ,     
		i_osm_resp_rx_pulse_p21   ,     
		i_osm_req_tx_pulse_p22    ,     
		i_osm_resp_rx_pulse_p22   ,     
		i_osm_req_tx_pulse_p23    ,     
		i_osm_resp_rx_pulse_p23   ,     
		i_osm_req_tx_pulse_p24    ,     
		i_osm_resp_rx_pulse_p24   ,     
		i_osm_req_tx_pulse_p25    ,     
		i_osm_resp_rx_pulse_p25   ,     
		i_osm_req_tx_pulse_p26    ,     
		i_osm_resp_rx_pulse_p26   ,     
		i_osm_req_tx_pulse_p27    ,     
		i_osm_resp_rx_pulse_p27   ,     
		i_osm_req_tx_pulse_p28    ,     
		i_osm_resp_rx_pulse_p28   ,     
		i_osm_req_tx_pulse_p29    ,     
		i_osm_resp_rx_pulse_p29   ,     
		i_osm_req_tx_pulse_p30    ,     
		i_osm_resp_rx_pulse_p30   ,     
		i_osm_req_tx_pulse_p31    ,     
		i_osm_resp_rx_pulse_p31   , 

        i_osm_req_rx_pulse_p0     ,
		i_osm_resp_tx_pulse_p0    ,
		i_osm_req_rx_pulse_p1     ,
		i_osm_resp_tx_pulse_p1    ,
		i_osm_req_rx_pulse_p2     ,
		i_osm_resp_tx_pulse_p2    ,
		i_osm_req_rx_pulse_p3     ,
		i_osm_resp_tx_pulse_p3    ,
		i_osm_req_rx_pulse_p4     ,
		i_osm_resp_tx_pulse_p4    ,
		i_osm_req_rx_pulse_p5     ,
		i_osm_resp_tx_pulse_p5    ,
		i_osm_req_rx_pulse_p6     ,
		i_osm_resp_tx_pulse_p6    ,
		i_osm_req_rx_pulse_p7     ,
		i_osm_resp_tx_pulse_p7    ,
		i_osm_req_rx_pulse_p8     ,
		i_osm_resp_tx_pulse_p8    ,
		i_osm_req_rx_pulse_p9     ,
		i_osm_resp_tx_pulse_p9    ,
		i_osm_req_rx_pulse_p10    ,
		i_osm_resp_tx_pulse_p10   ,
		i_osm_req_rx_pulse_p11    ,
		i_osm_resp_tx_pulse_p11   ,
		i_osm_req_rx_pulse_p12    ,
		i_osm_resp_tx_pulse_p12   ,
		i_osm_req_rx_pulse_p13    ,
		i_osm_resp_tx_pulse_p13   ,
		i_osm_req_rx_pulse_p14    ,
		i_osm_resp_tx_pulse_p14   ,
		i_osm_req_rx_pulse_p15    ,
		i_osm_resp_tx_pulse_p15   ,
		i_osm_req_rx_pulse_p16    ,
		i_osm_resp_tx_pulse_p16   ,
		i_osm_req_rx_pulse_p17    ,
		i_osm_resp_tx_pulse_p17   ,
		i_osm_req_rx_pulse_p18    ,
		i_osm_resp_tx_pulse_p18   ,
		i_osm_req_rx_pulse_p19    ,
		i_osm_resp_tx_pulse_p19   ,
		i_osm_req_rx_pulse_p20    ,
		i_osm_resp_tx_pulse_p20   ,
		i_osm_req_rx_pulse_p21    ,
		i_osm_resp_tx_pulse_p21   ,
		i_osm_req_rx_pulse_p22    ,
		i_osm_resp_tx_pulse_p22   ,
		i_osm_req_rx_pulse_p23    ,
		i_osm_resp_tx_pulse_p23   ,
		i_osm_req_rx_pulse_p24    ,
		i_osm_resp_tx_pulse_p24   ,
		i_osm_req_rx_pulse_p25    ,
		i_osm_resp_tx_pulse_p25   ,
		i_osm_req_rx_pulse_p26    ,
		i_osm_resp_tx_pulse_p26   ,
		i_osm_req_rx_pulse_p27    ,
		i_osm_resp_tx_pulse_p27   ,
		i_osm_req_rx_pulse_p28    ,
		i_osm_resp_tx_pulse_p28   ,
		i_osm_req_rx_pulse_p29    ,
		i_osm_resp_tx_pulse_p29   ,
		i_osm_req_rx_pulse_p30    ,
		i_osm_resp_tx_pulse_p30   ,
		i_osm_req_rx_pulse_p31    ,
		i_osm_resp_tx_pulse_p31           
);
// I/O
// clk & rst
input               i_clk;
input               i_rst_n; 

input               i_tsnnic_or_tsnswitch ;

output  [79:0]      ov_syn_clk        ;
output              o_local_cnt_rst   ;     
(*MARK_DEBUG="true"*)output             o_tsn_or_tte     ; 

(*MARK_DEBUG="true"*)output  [65:0]	    ov_hcp_ext_command        ;
(*MARK_DEBUG="true"*)output  	        o_hcp_ext_command_wr      ;
(*MARK_DEBUG="true"*)input   [65:0]	    iv_hcp_ext_command_ack    ;
(*MARK_DEBUG="true"*)input    	        i_hcp_ext_command_ack_wr  ;

(*MARK_DEBUG="true"*)input	 [8:0]	    iv_data_from_tss  ;
(*MARK_DEBUG="true"*)input	  		    i_data_wr_from_tss;

input   [8:0]           iv_data_cpu       ;
input                   i_data_wr_cpu     ; 
output  [8:0]           ov_data_cpu       ; 
output                  o_data_wr_cpu     ; 

(*MARK_DEBUG="true"*)output [8:0] 	  	ov_data_to_tss    ;
(*MARK_DEBUG="true"*)output      		o_data_wr_to_tss  ;

input   [8:0]           iv_data_tap       ;
input                   i_data_wr_tap     ;

output  [11:0]      ov_local_id                      ; 
input   [31:0]      iv_tss_ver                       ;
output              o_rc_rxenable                    ;
output              o_st_rxenable                    ;
input               i_tsmp_lookup_table_key_wr       ;
input   [47:0]      iv_tsmp_lookup_table_key         ;
output  [32:0]      ov_tsmp_lookup_table_outport     ;
output              o_tsmp_lookup_table_outport_wr   ;

(*MARK_DEBUG="true"*)output              o_cycle_start     ;           // 1024 ms / 1.024ms pluse
(*MARK_DEBUG="true"*)output              o_sync_ok         ;

input                  i_osm_req_tx_pulse_p0   ;
input                  i_osm_resp_rx_pulse_p0  ;
input                  i_osm_req_tx_pulse_p1   ;
input                  i_osm_resp_rx_pulse_p1  ;
input                  i_osm_req_tx_pulse_p2   ;
input                  i_osm_resp_rx_pulse_p2  ;
input                  i_osm_req_tx_pulse_p3   ;
input                  i_osm_resp_rx_pulse_p3  ;
input                  i_osm_req_tx_pulse_p4   ;
input                  i_osm_resp_rx_pulse_p4  ;
input                  i_osm_req_tx_pulse_p5   ;
input                  i_osm_resp_rx_pulse_p5  ;
input                  i_osm_req_tx_pulse_p6   ;
input                  i_osm_resp_rx_pulse_p6  ;
input                  i_osm_req_tx_pulse_p7   ;
input                  i_osm_resp_rx_pulse_p7  ;
input                  i_osm_req_tx_pulse_p8   ;
input                  i_osm_resp_rx_pulse_p8  ;
input                  i_osm_req_tx_pulse_p9   ;
input                  i_osm_resp_rx_pulse_p9  ;
input                  i_osm_req_tx_pulse_p10  ;
input                  i_osm_resp_rx_pulse_p10 ;
input                  i_osm_req_tx_pulse_p11  ;
input                  i_osm_resp_rx_pulse_p11 ;
input                  i_osm_req_tx_pulse_p12  ;
input                  i_osm_resp_rx_pulse_p12 ;
input                  i_osm_req_tx_pulse_p13  ;
input                  i_osm_resp_rx_pulse_p13 ;
input                  i_osm_req_tx_pulse_p14  ;
input                  i_osm_resp_rx_pulse_p14 ;
input                  i_osm_req_tx_pulse_p15  ;
input                  i_osm_resp_rx_pulse_p15 ;
input                  i_osm_req_tx_pulse_p16  ;
input                  i_osm_resp_rx_pulse_p16 ;
input                  i_osm_req_tx_pulse_p17  ;
input                  i_osm_resp_rx_pulse_p17 ;
input                  i_osm_req_tx_pulse_p18  ;
input                  i_osm_resp_rx_pulse_p18 ;
input                  i_osm_req_tx_pulse_p19  ;
input                  i_osm_resp_rx_pulse_p19 ;
input                  i_osm_req_tx_pulse_p20  ;
input                  i_osm_resp_rx_pulse_p20 ;
input                  i_osm_req_tx_pulse_p21  ;
input                  i_osm_resp_rx_pulse_p21 ;
input                  i_osm_req_tx_pulse_p22  ;
input                  i_osm_resp_rx_pulse_p22 ;
input                  i_osm_req_tx_pulse_p23  ;
input                  i_osm_resp_rx_pulse_p23 ;
input                  i_osm_req_tx_pulse_p24  ;
input                  i_osm_resp_rx_pulse_p24 ;
input                  i_osm_req_tx_pulse_p25  ;
input                  i_osm_resp_rx_pulse_p25 ;
input                  i_osm_req_tx_pulse_p26  ;
input                  i_osm_resp_rx_pulse_p26 ;
input                  i_osm_req_tx_pulse_p27  ;
input                  i_osm_resp_rx_pulse_p27 ;
input                  i_osm_req_tx_pulse_p28  ;
input                  i_osm_resp_rx_pulse_p28 ;
input                  i_osm_req_tx_pulse_p29  ;
input                  i_osm_resp_rx_pulse_p29 ;
input                  i_osm_req_tx_pulse_p30  ;
input                  i_osm_resp_rx_pulse_p30 ;
input                  i_osm_req_tx_pulse_p31  ;
input                  i_osm_resp_rx_pulse_p31 ;

input                  i_osm_req_rx_pulse_p0   ;
input                  i_osm_resp_tx_pulse_p0  ;
input                  i_osm_req_rx_pulse_p1   ;
input                  i_osm_resp_tx_pulse_p1  ;
input                  i_osm_req_rx_pulse_p2   ;
input                  i_osm_resp_tx_pulse_p2  ;
input                  i_osm_req_rx_pulse_p3   ;
input                  i_osm_resp_tx_pulse_p3  ;
input                  i_osm_req_rx_pulse_p4   ;
input                  i_osm_resp_tx_pulse_p4  ;
input                  i_osm_req_rx_pulse_p5   ;
input                  i_osm_resp_tx_pulse_p5  ;
input                  i_osm_req_rx_pulse_p6   ;
input                  i_osm_resp_tx_pulse_p6  ;
input                  i_osm_req_rx_pulse_p7   ;
input                  i_osm_resp_tx_pulse_p7  ;
input                  i_osm_req_rx_pulse_p8   ;
input                  i_osm_resp_tx_pulse_p8  ;
input                  i_osm_req_rx_pulse_p9   ;
input                  i_osm_resp_tx_pulse_p9  ;
input                  i_osm_req_rx_pulse_p10  ;
input                  i_osm_resp_tx_pulse_p10 ;
input                  i_osm_req_rx_pulse_p11  ;
input                  i_osm_resp_tx_pulse_p11 ;
input                  i_osm_req_rx_pulse_p12  ;
input                  i_osm_resp_tx_pulse_p12 ;
input                  i_osm_req_rx_pulse_p13  ;
input                  i_osm_resp_tx_pulse_p13 ;
input                  i_osm_req_rx_pulse_p14  ;
input                  i_osm_resp_tx_pulse_p14 ;
input                  i_osm_req_rx_pulse_p15  ;
input                  i_osm_resp_tx_pulse_p15 ;
input                  i_osm_req_rx_pulse_p16  ;
input                  i_osm_resp_tx_pulse_p16 ;
input                  i_osm_req_rx_pulse_p17  ;
input                  i_osm_resp_tx_pulse_p17 ;
input                  i_osm_req_rx_pulse_p18  ;
input                  i_osm_resp_tx_pulse_p18 ;
input                  i_osm_req_rx_pulse_p19  ;
input                  i_osm_resp_tx_pulse_p19 ;
input                  i_osm_req_rx_pulse_p20  ;
input                  i_osm_resp_tx_pulse_p20 ;
input                  i_osm_req_rx_pulse_p21  ;
input                  i_osm_resp_tx_pulse_p21 ;
input                  i_osm_req_rx_pulse_p22  ;
input                  i_osm_resp_tx_pulse_p22 ;
input                  i_osm_req_rx_pulse_p23  ;
input                  i_osm_resp_tx_pulse_p23 ;
input                  i_osm_req_rx_pulse_p24  ;
input                  i_osm_resp_tx_pulse_p24 ;
input                  i_osm_req_rx_pulse_p25  ;
input                  i_osm_resp_tx_pulse_p25 ;
input                  i_osm_req_rx_pulse_p26  ;
input                  i_osm_resp_tx_pulse_p26 ;
input                  i_osm_req_rx_pulse_p27  ;
input                  i_osm_resp_tx_pulse_p27 ;
input                  i_osm_req_rx_pulse_p28  ;
input                  i_osm_resp_tx_pulse_p28 ;
input                  i_osm_req_rx_pulse_p29  ;
input                  i_osm_resp_tx_pulse_p29 ;
input                  i_osm_req_rx_pulse_p30  ;
input                  i_osm_resp_tx_pulse_p30 ;
input                  i_osm_req_rx_pulse_p31  ;
input                  i_osm_resp_tx_pulse_p31 ;

wire    [8:0] 	  	wv_data_ta2cps        ;
wire        		w_data_wr_ta2cps      ;
wire    [8:0] 	  	wv_data_cps2ta        ;
wire        		w_data_wr_cps2ta      ;
                                          
wire    [8:0] 	  	wv_data_osc2cps       ;
wire        		w_data_wr_osc2cps     ;
wire    [8:0] 	  	wv_data_cps2osc       ;
wire        		w_data_wr_cps2osc     ;

wire    [8:0] 	  	wv_data_rep_osc2cps   ;
wire        		w_data_wr_rep_osc2cps ;

wire                w_wr_ta2osc           ;
wire    [31:0]      wv_wdata_ta2osc       ;
wire    [18:0]      wv_addr_ta2osc        ;
wire                w_rd_ta2osc           ;
wire                w_wr_osc2ta           ;
wire    [18:0]      wv_raddr_osc2ta       ;
wire    [31:0]      wv_rdata_osc2ta       ;
                                          
wire                w_wr_ta2tft           ;
wire    [31:0]      wv_wdata_ta2tft       ;
wire    [18:0]      wv_addr_ta2tft        ;
wire                w_rd_ta2tft           ;
wire                w_wr_tft2ta           ;
wire    [18:0]      wv_raddr_tft2ta       ;
wire    [31:0]      wv_rdata_tft2ta       ;

wire                w_wr_ta2cc            ;
wire    [31:0]      wv_wdata_ta2cc        ;
wire    [18:0]      wv_addr_ta2cc         ;
wire                w_rd_ta2cc            ;
wire                w_wr_cc2ta            ;
wire    [18:0]      wv_raddr_cc2ta        ;
wire    [31:0]      wv_rdata_cc2ta        ;

wire    [31:0]      wv_master_port_osc2tft;

wire    [31:0]      wv_port_ptp_enabled_osc2tft;

wire    [8:0]       wv_data_rep2pdi       ;
wire                w_data_wr_rep2pdi     ;
control_packet_switch_top control_packet_switch_top_inst
(
        .i_clk             (i_clk      ),   
        .i_rst_n           (i_rst_n    ),
        
        .i_local_or_remote_ctrl(1'b1),//1'b0:local;  1'b1:remote
 
        .iv_data_cpu       (iv_data_cpu  ),
        .i_data_wr_cpu     (i_data_wr_cpu), 
        .ov_data_cpu       (ov_data_cpu  ),        
        .o_data_wr_cpu     (o_data_wr_cpu), 
      
        .iv_data_ta        (wv_data_ta2cps  ),
        .i_data_wr_ta      (w_data_wr_ta2cps),    
        .ov_data_ta        (wv_data_cps2ta  ),        
        .o_data_wr_ta      (w_data_wr_cps2ta), 
      
        .iv_data_osc       (wv_data_osc2cps   ),
        .i_data_wr_osc     (w_data_wr_osc2cps ),    
        .ov_data_osc       (wv_data_cps2osc   ),        
        .o_data_wr_osc     (w_data_wr_cps2osc ),
       
        .iv_data_tse       (iv_data_from_tss  ),
        .i_data_wr_tse     (i_data_wr_from_tss),    
        .ov_data_tse       (ov_data_to_tss    ),        
        .o_data_wr_tse     (o_data_wr_to_tss  ),          
    
        .iv_data_tap       (iv_data_tap       ),
        .i_data_wr_tap     (i_data_wr_tap     ),
      
        .iv_data_rep       (wv_data_rep_osc2cps  ),
        .i_data_wr_rep     (w_data_wr_rep_osc2cps)        
);

tsmp_agent tsmp_agent_inst
(
.i_clk                          (i_clk              ),
.i_rst_n                        (i_rst_n            ),
                                                    
.iv_syn_clk                     (ov_syn_clk         ),
.i_cycle_start                  (o_cycle_start      ),
.i_sync_ok                      (o_sync_ok          ),
                                                                                                  
.i_data_wr                      (w_data_wr_cps2ta   ),                              
.iv_data                        (wv_data_cps2ta     ),                                                                              
.ov_data                        (wv_data_ta2cps   ),                         
.o_data_wr                      (w_data_wr_ta2cps ),  
                                                    
.ov_local_id                    (ov_local_id        ),
.iv_tss_ver                     (iv_tss_ver         ),
.o_rc_rxenable                  (o_rc_rxenable      ),
.o_st_rxenable                  (o_st_rxenable      ),
.o_tsn_or_tte                   (o_tsn_or_tte),

.o_wr_ost                       (w_wr_ta2osc        ),
.ov_wdata_ost                   (wv_wdata_ta2osc    ),
.ov_addr_ost                    (wv_addr_ta2osc     ),
.o_rd_ost                       (w_rd_ta2osc        ),
.i_wr_ost                       (w_wr_osc2ta        ),
.iv_raddr_ost                   (wv_raddr_osc2ta    ),
.iv_rdata_ost                   (wv_rdata_osc2ta    ),
                                            
.o_wr_tft                       (w_wr_ta2tft        ),
.ov_wdata_tft                   (wv_wdata_ta2tft    ),
.ov_addr_tft                    (wv_addr_ta2tft     ),
.o_rd_tft                       (w_rd_ta2tft        ),
.i_wr_tft                       (w_wr_tft2ta        ),
.iv_raddr_tft                   (wv_raddr_tft2ta    ),
.iv_rdata_tft                   (wv_rdata_tft2ta    ),

.o_wr_cc                        (w_wr_ta2cc         ),
.ov_wdata_cc                    (wv_wdata_ta2cc     ),
.ov_addr_cc                     (wv_addr_ta2cc      ),
.o_rd_cc                        (w_rd_ta2cc         ),
.i_wr_cc                        (w_wr_cc2ta         ),
.iv_raddr_cc                    (wv_raddr_cc2ta     ),
.iv_rdata_cc                    (wv_rdata_cc2ta     ),
                                               
.ov_hcp_ext_command             (ov_hcp_ext_command        ),
.o_hcp_ext_command_wr           (o_hcp_ext_command_wr      ),
.iv_hcp_ext_command_ack         (iv_hcp_ext_command_ack    ),
.i_hcp_ext_command_ack_wr       (i_hcp_ext_command_ack_wr  )
);

tsmp_forward_table tsmp_forward_table_inst
(
.i_clk                            (i_clk                            ),
.i_rst_n                          (i_rst_n                          ),

.iv_hcp_mid                       (ov_local_id                      ),
.iv_master_port                   (wv_master_port_osc2tft           ),
.iv_port_ptp_enabled              (wv_port_ptp_enabled_osc2tft      ),
 
.iv_addr                          (wv_addr_ta2tft                   ), 
.iv_wdata                         (wv_wdata_ta2tft                  ),  
.i_wr                             (w_wr_ta2tft                      ), 
.i_rd                             (w_rd_ta2tft                      ),                
.o_wr                             (w_wr_tft2ta                      ), 
.ov_addr                          (wv_raddr_tft2ta                  ), 
.ov_rdata                         (wv_rdata_tft2ta                  ), 

.i_tsmp_lookup_table_key_wr       (i_tsmp_lookup_table_key_wr       ),
.iv_tsmp_lookup_table_key         (iv_tsmp_lookup_table_key         ),
.ov_tsmp_lookup_table_outport     (ov_tsmp_lookup_table_outport     ),
.o_tsmp_lookup_table_outport_wr   (o_tsmp_lookup_table_outport_wr   )	   
);

opensync_control #(.local_module_id(12'd0)) opensync_control_inst
(
        .i_clk                     (i_clk  ),
        .i_rst_n                   (i_rst_n),
     
        .i_wr                      (w_wr_ta2osc      ),      
        .iv_wdata                  (wv_wdata_ta2osc  ),      
        .iv_addr                   (wv_addr_ta2osc   ),      
        .i_rd                      (w_rd_ta2osc      ),           
        .o_wr                      (w_wr_osc2ta      ),       
        .ov_rdata                  (wv_rdata_osc2ta  ),        
        .ov_raddr                  (wv_raddr_osc2ta  ), 

        .i_tsnnic_or_tsnswitch     (i_tsnnic_or_tsnswitch     ),//1:tsnnic.  0:tsnswitch        
                                
        .ov_sync_clk               (ov_syn_clk       ),
		.o_local_cnt_rst           (o_local_cnt_rst  ),
		.iv_hcp_mid                (ov_local_id      ),
		.ov_master_port            (wv_master_port_osc2tft        ),
		.o_sync_ok                 (o_sync_ok                     ),
		.o_sync_ok_wr              (                              ),
        .ov_port_ptp_enabled       (wv_port_ptp_enabled_osc2tft   ),
	 
		.iv_data                   (wv_data_cps2osc       ),
		.i_data_wr                 (w_data_wr_cps2osc     ), 
		.ov_data                   (wv_data_osc2cps       ), 
		.o_data_wr                 (w_data_wr_osc2cps 	  ), 
        
        .ov_data_report             (wv_data_rep_osc2cps   ),
        .o_data_wr_report           (w_data_wr_rep_osc2cps ),
		               
		.i_osm_req_tx_pulse_p0     (i_osm_req_tx_pulse_p0   ),     
		.i_osm_resp_rx_pulse_p0    (i_osm_resp_rx_pulse_p0  ),     
		.i_osm_req_tx_pulse_p1     (i_osm_req_tx_pulse_p1   ),     
		.i_osm_resp_rx_pulse_p1    (i_osm_resp_rx_pulse_p1  ),     
		.i_osm_req_tx_pulse_p2     (i_osm_req_tx_pulse_p2   ),     
		.i_osm_resp_rx_pulse_p2    (i_osm_resp_rx_pulse_p2  ),     
		.i_osm_req_tx_pulse_p3     (i_osm_req_tx_pulse_p3   ),     
		.i_osm_resp_rx_pulse_p3    (i_osm_resp_rx_pulse_p3  ),     
		.i_osm_req_tx_pulse_p4     (i_osm_req_tx_pulse_p4   ),     
		.i_osm_resp_rx_pulse_p4    (i_osm_resp_rx_pulse_p4  ),     
		.i_osm_req_tx_pulse_p5     (i_osm_req_tx_pulse_p5   ),     
		.i_osm_resp_rx_pulse_p5    (i_osm_resp_rx_pulse_p5  ),     
		.i_osm_req_tx_pulse_p6     (i_osm_req_tx_pulse_p6   ),     
		.i_osm_resp_rx_pulse_p6    (i_osm_resp_rx_pulse_p6  ),     
		.i_osm_req_tx_pulse_p7     (i_osm_req_tx_pulse_p7   ),     
		.i_osm_resp_rx_pulse_p7    (i_osm_resp_rx_pulse_p7  ),     
		.i_osm_req_tx_pulse_p8     (i_osm_req_tx_pulse_p8   ),     
		.i_osm_resp_rx_pulse_p8    (i_osm_resp_rx_pulse_p8  ),     
		.i_osm_req_tx_pulse_p9     (i_osm_req_tx_pulse_p9   ),     
		.i_osm_resp_rx_pulse_p9    (i_osm_resp_rx_pulse_p9  ),     
		.i_osm_req_tx_pulse_p10    (i_osm_req_tx_pulse_p10  ),     
		.i_osm_resp_rx_pulse_p10   (i_osm_resp_rx_pulse_p10 ),     
		.i_osm_req_tx_pulse_p11    (i_osm_req_tx_pulse_p11  ),     
		.i_osm_resp_rx_pulse_p11   (i_osm_resp_rx_pulse_p11 ),     
		.i_osm_req_tx_pulse_p12    (i_osm_req_tx_pulse_p12  ),     
		.i_osm_resp_rx_pulse_p12   (i_osm_resp_rx_pulse_p12 ),     
		.i_osm_req_tx_pulse_p13    (i_osm_req_tx_pulse_p13  ),     
		.i_osm_resp_rx_pulse_p13   (i_osm_resp_rx_pulse_p13 ),     
		.i_osm_req_tx_pulse_p14    (i_osm_req_tx_pulse_p14  ),     
		.i_osm_resp_rx_pulse_p14   (i_osm_resp_rx_pulse_p14 ),     
		.i_osm_req_tx_pulse_p15    (i_osm_req_tx_pulse_p15  ),     
		.i_osm_resp_rx_pulse_p15   (i_osm_resp_rx_pulse_p15 ),     
		.i_osm_req_tx_pulse_p16    (i_osm_req_tx_pulse_p16  ),     
		.i_osm_resp_rx_pulse_p16   (i_osm_resp_rx_pulse_p16 ),     
		.i_osm_req_tx_pulse_p17    (i_osm_req_tx_pulse_p17  ),     
		.i_osm_resp_rx_pulse_p17   (i_osm_resp_rx_pulse_p17 ),     
		.i_osm_req_tx_pulse_p18    (i_osm_req_tx_pulse_p18  ),     
		.i_osm_resp_rx_pulse_p18   (i_osm_resp_rx_pulse_p18 ),     
		.i_osm_req_tx_pulse_p19    (i_osm_req_tx_pulse_p19  ),     
		.i_osm_resp_rx_pulse_p19   (i_osm_resp_rx_pulse_p19 ),     
		.i_osm_req_tx_pulse_p20    (i_osm_req_tx_pulse_p20  ),     
		.i_osm_resp_rx_pulse_p20   (i_osm_resp_rx_pulse_p20 ),     
		.i_osm_req_tx_pulse_p21    (i_osm_req_tx_pulse_p21  ),     
		.i_osm_resp_rx_pulse_p21   (i_osm_resp_rx_pulse_p21 ),     
		.i_osm_req_tx_pulse_p22    (i_osm_req_tx_pulse_p22  ),     
		.i_osm_resp_rx_pulse_p22   (i_osm_resp_rx_pulse_p22 ),     
		.i_osm_req_tx_pulse_p23    (i_osm_req_tx_pulse_p23  ),     
		.i_osm_resp_rx_pulse_p23   (i_osm_resp_rx_pulse_p23 ),     
		.i_osm_req_tx_pulse_p24    (i_osm_req_tx_pulse_p24  ),     
		.i_osm_resp_rx_pulse_p24   (i_osm_resp_rx_pulse_p24 ),     
		.i_osm_req_tx_pulse_p25    (i_osm_req_tx_pulse_p25  ),     
		.i_osm_resp_rx_pulse_p25   (i_osm_resp_rx_pulse_p25 ),     
		.i_osm_req_tx_pulse_p26    (i_osm_req_tx_pulse_p26  ),     
		.i_osm_resp_rx_pulse_p26   (i_osm_resp_rx_pulse_p26 ),     
		.i_osm_req_tx_pulse_p27    (i_osm_req_tx_pulse_p27  ),     
		.i_osm_resp_rx_pulse_p27   (i_osm_resp_rx_pulse_p27 ),     
		.i_osm_req_tx_pulse_p28    (i_osm_req_tx_pulse_p28  ),     
		.i_osm_resp_rx_pulse_p28   (i_osm_resp_rx_pulse_p28 ),     
		.i_osm_req_tx_pulse_p29    (i_osm_req_tx_pulse_p29  ),     
		.i_osm_resp_rx_pulse_p29   (i_osm_resp_rx_pulse_p29 ),     
		.i_osm_req_tx_pulse_p30    (i_osm_req_tx_pulse_p30  ),     
		.i_osm_resp_rx_pulse_p30   (i_osm_resp_rx_pulse_p30 ),     
		.i_osm_req_tx_pulse_p31    (i_osm_req_tx_pulse_p31  ),     
		.i_osm_resp_rx_pulse_p31   (i_osm_resp_rx_pulse_p31 ), 
         
        .i_osm_req_rx_pulse_p0     (i_osm_req_rx_pulse_p0   ),
		.i_osm_resp_tx_pulse_p0    (i_osm_resp_tx_pulse_p0  ),
		.i_osm_req_rx_pulse_p1     (i_osm_req_rx_pulse_p1   ),
		.i_osm_resp_tx_pulse_p1    (i_osm_resp_tx_pulse_p1  ),
		.i_osm_req_rx_pulse_p2     (i_osm_req_rx_pulse_p2   ),
		.i_osm_resp_tx_pulse_p2    (i_osm_resp_tx_pulse_p2  ),
		.i_osm_req_rx_pulse_p3     (i_osm_req_rx_pulse_p3   ),
		.i_osm_resp_tx_pulse_p3    (i_osm_resp_tx_pulse_p3  ),
		.i_osm_req_rx_pulse_p4     (i_osm_req_rx_pulse_p4   ),
		.i_osm_resp_tx_pulse_p4    (i_osm_resp_tx_pulse_p4  ),
		.i_osm_req_rx_pulse_p5     (i_osm_req_rx_pulse_p5   ),
		.i_osm_resp_tx_pulse_p5    (i_osm_resp_tx_pulse_p5  ),
		.i_osm_req_rx_pulse_p6     (i_osm_req_rx_pulse_p6   ),
		.i_osm_resp_tx_pulse_p6    (i_osm_resp_tx_pulse_p6  ),
		.i_osm_req_rx_pulse_p7     (i_osm_req_rx_pulse_p7   ),
		.i_osm_resp_tx_pulse_p7    (i_osm_resp_tx_pulse_p7  ),
		.i_osm_req_rx_pulse_p8     (i_osm_req_rx_pulse_p8   ),
		.i_osm_resp_tx_pulse_p8    (i_osm_resp_tx_pulse_p8  ),
		.i_osm_req_rx_pulse_p9     (i_osm_req_rx_pulse_p9   ),
		.i_osm_resp_tx_pulse_p9    (i_osm_resp_tx_pulse_p9  ),
		.i_osm_req_rx_pulse_p10    (i_osm_req_rx_pulse_p10  ),
		.i_osm_resp_tx_pulse_p10   (i_osm_resp_tx_pulse_p10 ),
		.i_osm_req_rx_pulse_p11    (i_osm_req_rx_pulse_p11  ),
		.i_osm_resp_tx_pulse_p11   (i_osm_resp_tx_pulse_p11 ),
		.i_osm_req_rx_pulse_p12    (i_osm_req_rx_pulse_p12  ),
		.i_osm_resp_tx_pulse_p12   (i_osm_resp_tx_pulse_p12 ),
		.i_osm_req_rx_pulse_p13    (i_osm_req_rx_pulse_p13  ),
		.i_osm_resp_tx_pulse_p13   (i_osm_resp_tx_pulse_p13 ),
		.i_osm_req_rx_pulse_p14    (i_osm_req_rx_pulse_p14  ),
		.i_osm_resp_tx_pulse_p14   (i_osm_resp_tx_pulse_p14 ),
		.i_osm_req_rx_pulse_p15    (i_osm_req_rx_pulse_p15  ),
		.i_osm_resp_tx_pulse_p15   (i_osm_resp_tx_pulse_p15 ),
		.i_osm_req_rx_pulse_p16    (i_osm_req_rx_pulse_p16  ),
		.i_osm_resp_tx_pulse_p16   (i_osm_resp_tx_pulse_p16 ),
		.i_osm_req_rx_pulse_p17    (i_osm_req_rx_pulse_p17  ),
		.i_osm_resp_tx_pulse_p17   (i_osm_resp_tx_pulse_p17 ),
		.i_osm_req_rx_pulse_p18    (i_osm_req_rx_pulse_p18  ),
		.i_osm_resp_tx_pulse_p18   (i_osm_resp_tx_pulse_p18 ),
		.i_osm_req_rx_pulse_p19    (i_osm_req_rx_pulse_p19  ),
		.i_osm_resp_tx_pulse_p19   (i_osm_resp_tx_pulse_p19 ),
		.i_osm_req_rx_pulse_p20    (i_osm_req_rx_pulse_p20  ),
		.i_osm_resp_tx_pulse_p20   (i_osm_resp_tx_pulse_p20 ),
		.i_osm_req_rx_pulse_p21    (i_osm_req_rx_pulse_p21  ),
		.i_osm_resp_tx_pulse_p21   (i_osm_resp_tx_pulse_p21 ),
		.i_osm_req_rx_pulse_p22    (i_osm_req_rx_pulse_p22  ),
		.i_osm_resp_tx_pulse_p22   (i_osm_resp_tx_pulse_p22 ),
		.i_osm_req_rx_pulse_p23    (i_osm_req_rx_pulse_p23  ),
		.i_osm_resp_tx_pulse_p23   (i_osm_resp_tx_pulse_p23 ),
		.i_osm_req_rx_pulse_p24    (i_osm_req_rx_pulse_p24  ),
		.i_osm_resp_tx_pulse_p24   (i_osm_resp_tx_pulse_p24 ),
		.i_osm_req_rx_pulse_p25    (i_osm_req_rx_pulse_p25  ),
		.i_osm_resp_tx_pulse_p25   (i_osm_resp_tx_pulse_p25 ),
		.i_osm_req_rx_pulse_p26    (i_osm_req_rx_pulse_p26  ),
		.i_osm_resp_tx_pulse_p26   (i_osm_resp_tx_pulse_p26 ),
		.i_osm_req_rx_pulse_p27    (i_osm_req_rx_pulse_p27  ),
		.i_osm_resp_tx_pulse_p27   (i_osm_resp_tx_pulse_p27 ),
		.i_osm_req_rx_pulse_p28    (i_osm_req_rx_pulse_p28  ),
		.i_osm_resp_tx_pulse_p28   (i_osm_resp_tx_pulse_p28 ),
		.i_osm_req_rx_pulse_p29    (i_osm_req_rx_pulse_p29  ),
		.i_osm_resp_tx_pulse_p29   (i_osm_resp_tx_pulse_p29 ),
		.i_osm_req_rx_pulse_p30    (i_osm_req_rx_pulse_p30  ),
		.i_osm_resp_tx_pulse_p30   (i_osm_resp_tx_pulse_p30 ),
		.i_osm_req_rx_pulse_p31    (i_osm_req_rx_pulse_p31  ),
		.i_osm_resp_tx_pulse_p31   (i_osm_resp_tx_pulse_p31 )
);

cycle_control cycle_control_inst
(
.i_clk                   (i_clk              ),
.i_rst_n                 (i_rst_n            ),

.i_wr_cc                 (w_wr_ta2cc         ),
.iv_wdata_cc             (wv_wdata_ta2cc     ),
.iv_addr_cc              (wv_addr_ta2cc      ),
.i_rd_cc                 (w_rd_ta2cc         ),
.o_wr_cc                 (w_wr_cc2ta         ),
.ov_rdata_cc             (wv_rdata_cc2ta     ),
.ov_raddr_cc             (wv_raddr_cc2ta     ),

.iv_syn_clk              (ov_syn_clk         ),
.i_syn_ok                (o_sync_ok     ),
.i_tsn_or_tte            (o_tsn_or_tte       ),

.iv_syn_clk_cycle        (ov_syn_clock_cycle ),
.o_cycle_start           (o_cycle_start      )
);
endmodule 